package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import connectionMSqL.MySQLConn;
import entity.Usuario;

public class UsuarioDAO {

	public static Usuario createUsuario(ResultSet rs) throws SQLException {

		Usuario usuario = new Usuario();
		usuario.setId(rs.getInt("id"));
		usuario.setNome(rs.getString("nome"));
		usuario.setLogin(rs.getString("login"));
		usuario.setSenha(rs.getString("senha"));
		usuario.setEmail(rs.getString("email"));

		return usuario;
	}

	public static boolean insert(Usuario u) {
		boolean salvou = false;

		Connection conn = MySQLConn.getConn();
		PreparedStatement ps = null;
		try {
			int paramIndex = 1;
			ps = conn.prepareStatement("INSERT INTO usuario "
					+ "(nome,login,senha,email)" + "VALUES (?,?,?,?)");
			ps.setString(paramIndex++, u.getNome());
			ps.setString(paramIndex++, u.getLogin());
			ps.setString(paramIndex++, u.getSenha());
			ps.setString(paramIndex++, u.getEmail());

			ps.executeUpdate();
			salvou = true;

		} catch (SQLException e) {
			System.out.print("Erro UsuarioDAO.insert: " + e.getMessage());
		} finally {
			try {
				if (ps != null)
					ps.close();
				if (conn != null)
					ps.close();
			} catch (SQLException e) {
				e.getMessage();
				System.out.print("Erro UsuarioDAO.insert: " + e.getMessage());
			}
		}
		return salvou;
	}

	public static List<Usuario> getAll() {
		List<Usuario> usuarios = new ArrayList<Usuario>();
		Connection conn = MySQLConn.getConn();
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			ps = conn.prepareStatement("SELECT * FROM usuario WHERE id <> 1");
			rs = ps.executeQuery();
			while (rs.next()) {

				Usuario u = createUsuario(rs);
				usuarios.add(u);
			}

		} catch (SQLException e) {
			System.out.print("Erro UsuarioDAO.getAll: " + e.getMessage());
		} finally {
			try {
				if (rs != null)
					rs.close();
				if (ps != null)
					ps.close();
				if (conn != null)
					conn.close();

			} catch (SQLException e) {
				System.out.print("Erro UsuarioDAO.getAll: " + e.getMessage());
			}
		}
		return usuarios;
	}

	public static boolean update(Usuario u) {
		
		Connection conn = MySQLConn.getConn();
		PreparedStatement ps = null;
		try {
			String query = ("UPDATE usuario " + "SET nome='" + u.getNome()
					+ "'" + ", login='" + u.getLogin() + "'" + ", senha= '"
					+ u.getSenha() + "'" + ", email='" + u.getEmail() + "' "
					+ "WHERE id = " + u.getId());
			
			ps = conn.prepareStatement(query);
			ps.executeUpdate();
			return true;

		} catch (SQLException e) {
			System.out.print("Erro UsuarioDAO.update: " + e.getMessage());
		} finally {
			try {
				if (ps != null)
					ps.close();
				if (conn != null)
					conn.close();
			} catch (SQLException e) {
				System.out.print("Erro UsuarioDAO.update: " + e.getMessage());
			}
		}
		return false;
	}

	public static Usuario findById(int id) {
		Usuario usuario = null;
		Connection conn = MySQLConn.getConn();
		PreparedStatement ps = null;
		ResultSet rs = null;

		try {
			ps = conn
					.prepareStatement(" SELECT * FROM usuario WHERE id= " + id);
			rs = ps.executeQuery();
			if (rs.next()) {
				usuario = createUsuario(rs);
				
			}

		} catch (SQLException e) {
			System.out.print("Erro UsuarioDAO.findById: " + e.getMessage());
		} finally {
			try {
				if (rs != null)
					rs.close();
				if (ps != null)
					ps.close();
				if (conn != null)
					conn.close();
			} catch (SQLException e) {
				System.out.print("Erro UsuarioDAO.findById: " + e.getMessage());
			}
		}
		return usuario;
	}
	
	public static List<Usuario> findByIds(int id) {
		List<Usuario> usuarios = new ArrayList<Usuario>();
		Connection conn = MySQLConn.getConn();
		PreparedStatement ps = null;
		ResultSet rs = null;

		try {
			ps = conn
					.prepareStatement(" SELECT * FROM usuario WHERE id= " + id);
			rs = ps.executeQuery();
			if (rs.next()) {
				
				Usuario p = createUsuario(rs);
				usuarios.add(p);
			}

		} catch (SQLException e) {
			System.out.print("Erro UsuarioDAO.findByIds: " + e.getMessage());
		} finally {
			try {
				if (rs != null)
					rs.close();
				if (ps != null)
					ps.close();
				if (conn != null)
					conn.close();
			} catch (SQLException e) {
				System.out.print("Erro UsuarioDAO.findByIds: " + e.getMessage());
			}
		}
		return usuarios;
	}

	public static Usuario findByLoginSenha(String login, String senha) {
		
		Usuario usuario = null;
		Connection conn = MySQLConn.getConn();
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			ps = conn.prepareStatement(" SELECT * FROM usuario"
					+ " WHERE login='" + login + "'" + " AND senha = '" + senha
					+ "'");
			rs = ps.executeQuery();
			if (rs.next()) {
				usuario = createUsuario(rs);
			}

		} catch (SQLException e) {
			System.out.print("Erro UsuarioDAO.findByLoginSenha: "
					+ e.getMessage());
		} finally {
			try {
				if (rs != null)
					rs.close();
				if (ps != null)
					ps.close();
				if (conn != null)
					conn.close();
			} catch (SQLException e) {
				System.out.print("Erro UsuarioDAO.findByLoginSenha: "
						+ e.getMessage());
			}
		}
		return usuario;
	}
	
	public static boolean delete(int id) {
		
		Connection conn = MySQLConn.getConn();
		PreparedStatement ps = null;
		
		try {
			ps = conn.prepareStatement(" DELETE FROM usuario WHERE id=" + id);
			ps.executeUpdate();

		} catch (SQLException e) {
			System.out.println(e.getMessage());
			return false;
			} finally {
			try {
				if (ps != null)
					ps.close();
				if (conn != null)
					conn.close();

			} catch (SQLException e) {
				System.out.println(e.getMessage());
				return false;
			}
		}
		return true;
	}
	
}
